/*
 * @Author: zh
 * @Date: 2024-12-06 13:58:33
 * @LastEditors: zh
 * @LastEditTime: 2024-12-09 15:15:58
 * @Description: 
 */
import { parse } from "dotenv"
import { readFile } from "fs-extra"
import { join } from "node:path"

function getConfFiles() {
    const script = process.env.npm_lifecycle_script as string;
    const reg = new RegExp('--mode ([a-z_\\d]+)')
    const result = reg.exec(script);
    if (result) {
        const mode = result[1]
        return ['.env', `.env.${mode}`]
    }
    return ['.env', '.env.production']
}
/**
 * Get the environment variables starting with the specified prefix
 * @param match prefix
 * @param confFiles ext
 */
export async function getEnvConfig(
    match = 'VITE_GLOB_',
    confFiles = getConfFiles()
): Promise<{
    [key: string]: string
}> {
    let envConfig = {}

    for (const confFile of confFiles) {
        try {
            const envPath = await readFile(join(process.cwd(), confFile), { encoding: 'utf-8' })
            const env = parse(envPath);
            envConfig = { ...envConfig, ...env }
        } catch (e) {
            console.error(`Error in parsing ${confFile}: `, e)
        }

    }

    const reg = new RegExp(`^(${match})`)
    Object.keys(envConfig).forEach((key) => {
        if (!reg.test(key)) {
            Reflect.deleteProperty(envConfig, key)
        }
    })

    return envConfig;
}